home *** CD-ROM | disk | FTP | other *** search
- // tsinread.cc. Test for -*- C++ -*- socket library
- // Copyright (C) 1992,1993 Gnanasekaran Swaminathan <gs4t@virginia.edu>
- //
- // Permission is granted to use at your own risk and distribute this software
- // in source and binary forms provided the above copyright
- // notice and this paragraph are preserved on all copies.
- // This software is provided "as is" with no express or implied warranty.
- //
- // Version: 07Nov93 1.5
-
- #include <sockinet.h>
-
- extern "C" {
- void sleep(int);
- }
-
-
- static void process_input (iosockinet& s);
-
-
- main()
- {
- sockinetbuf sin (sockbuf::sock_stream);
-
- sin.bind();
-
- cout << "localhost = " << sin.localhost() << endl
- << "localport = " << sin.localport() << endl;
-
- sin.listen();
-
- for(;;) {
- iosockinet s = sin.accept();
-
- process_input(s);
- s->close();
-
- // lets use select to find out whether a socket is ready
- if (!sin.is_readready(2)) {
- // the socket is not ready. Let us sleep for 1 sec.
- sleep(1);
- }
-
- iosockinet s2 = sin.accept();
- process_input(s2);
- break; // let us get out of forever
- }
- }
-
- static void process_input(iosockinet& sio)
- {
- char buf[256];
- char* p = buf;
-
- sio >> p;
-
- while (*p) {
- if (*p != '%')
- cout << *p;
- else
- switch (*++p) {
- case 'd': {
- int i;
- sio >> i;
- cout << i << ' ';
- sio << "INT ";
- break;
- }
- case 'f': {
- double d;
- sio >> d;
- cout << d << ' ';
- sio << "DOUBLE ";
- break;
- }
- case 's': {
- char str[256];
- sio >> str;
- cout << str << ' ';
- sio << "STRING ";
- break;
- }
- case 'c': {
- char c;
- sio >> c;
- cout << c << ' ';
- sio << "CHAR ";
- break;
- }
- case '%':
- cout << '%' << ' ';
- break;
- default:
- cout << '%' << *p;
- }
- p++;
- }
- sio << "received\n";
- cout << endl;
- }
-
-
-